package Persistence;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date; 
import java.util.List;

import Model.TemperaturaNB;
import Model.Temperaturas;
import Persistence.Pool.Pool;

public class TemperaturaNBDAO {
	private Connection conexion = null;
	private ResultSet conjuntoResultados = null;
	private Pool pool = null;
	private PreparedStatement pstmt=null;
	private SimpleDateFormat formatoFecha = new SimpleDateFormat("dd/MM/yyyy");
	
	public List<TemperaturaNB> getTemperaturaNBbyDate(Date date,String bd) {
		List<TemperaturaNB> temperaturasNB = new ArrayList<TemperaturaNB>();
		try {
			pool = new Pool(bd);
			conexion = pool.getBasicDataSource().getConnection();
			pstmt=conexion.prepareStatement("select * from temperatura_nb where fecha=?");
			pstmt.setString(1,formatoFecha.format(date));
			conjuntoResultados=pstmt.executeQuery();
		 	while (conjuntoResultados.next()) {
				temperaturasNB.add(new TemperaturaNB((Date)formatoFecha.parse(conjuntoResultados.getString("fecha")),conjuntoResultados
						.getString("hora"),conjuntoResultados.getDouble("sensor_c"), conjuntoResultados.getDouble("sensor_n"),
						conjuntoResultados.getDouble("sensor_ne"),conjuntoResultados.getDouble("sensor_e"),
						conjuntoResultados.getDouble("sensor_se"),conjuntoResultados.getDouble("sensor_s"),
						conjuntoResultados.getDouble("sensor_so"),conjuntoResultados.getDouble("sensor_o"),
						conjuntoResultados.getDouble("sensor_no")));
			}
		} catch (Exception e) { // tratamiento de error
			e.printStackTrace();

		} finally {
			try {
				if (null != conexion) {
					conexion.close();
				} // realizaci�n de la consulta
			} catch (Exception e) { // tratamiento de error

			}
		}
		return temperaturasNB;
	}
         public Temperaturas getTempSFecha(String fecha, String sensor,String bd) {
        /*Calendar fecha = Calendar.getInstance();
        //fecha.setTime(date);*/
        //List<Temperaturas> consultaTemperaturas=new ArrayList<Temperaturas>();
     Temperaturas t=new Temperaturas();
           
            try {
               // for(String sensor:sensores){
                pool = new Pool(bd);
                conexion = pool.getBasicDataSource().getConnection();
                String query = "select MAX(" + sensor + ")as temp_max, MIN(" + sensor + ") as temp_min  from temperatura_nb where fecha=?";
                pstmt = conexion.prepareStatement(query);
                pstmt.setString(1, fecha);
                conjuntoResultados = pstmt.executeQuery();
               
                conjuntoResultados.next();
                    t.setTemperaturaMax(conjuntoResultados.getDouble("temp_max"));
                    t.setTemperaturaMin(conjuntoResultados.getDouble("temp_min"));
                 //consultaTemperaturas.add(t);   
                
               // }

            } catch (Exception e) { // tratamiento de error
                e.printStackTrace();

            } finally {
                try {
                    if (null != conexion) {
                        conexion.close();
                    } // realizaciï¿½n de la consulta
                } catch (Exception e) { // tratamiento de error
                }
            }
            
            
            //System.out.println(formatoFecha.format(date.getTime()));
            
        
        //return consultaTemperaturas;
            return t;
    }
   

	
	public List<Temperaturas> getTempS(List<String>fechas,String sensor,String bd) {
		List<Temperaturas> temp = new ArrayList<Temperaturas>();
		Temperaturas t;
		/*Calendar fecha = Calendar.getInstance();
		fecha.setTime(date);*/
		for(String f:fechas){
			 t=new Temperaturas();
		try {
			pool = new Pool(bd);
			conexion = pool.getBasicDataSource().getConnection();
			String query="select MAX("+sensor+"), MIN("+sensor+")  from temperatura_nb where fecha=?";
			pstmt=conexion.prepareStatement(query);
			pstmt.setString(1,f);
			conjuntoResultados=pstmt.executeQuery();
			t.setFecha((Date)formatoFecha.parse(f));
				while (conjuntoResultados.next()) {
			         t.setTemperaturaMax(conjuntoResultados.getDouble("MAX("+sensor+")"));
			         t.setTemperaturaMin(conjuntoResultados.getDouble("MIN("+sensor+")"));
                                 break;
				}
			
		} catch (Exception e) { // tratamiento de error
			e.printStackTrace();

		} finally {
			try {
				if (null != conexion) {
					conexion.close();
				} // realizaci�n de la consulta
			} catch (Exception e) { // tratamiento de error

			}
		}
		temp.add(t);
		//System.out.println(formatoFecha.format(date.getTime()));
		}
		return temp;
	}
	
	public List<String> getFechas(String fechaI,String fechaF,String bd){
		List<String> fechas = new ArrayList<String>();

		try {
			pool = new Pool(bd);
			conexion = pool.getBasicDataSource().getConnection();
			String query="SELECT DISTINCT fecha FROM temperatura_nb where clave  between (select min(clave) from temperatura_nb where fecha='"+fechaI+"') and (select max(clave) from temperatura_nb where fecha='"+fechaF+"')";
			pstmt=conexion.prepareStatement(query);
			conjuntoResultados=pstmt.executeQuery();
                            if(conjuntoResultados.next()){
                                fechas.add(conjuntoResultados.getString("fecha"));
				while (conjuntoResultados.next()) {
					fechas.add(conjuntoResultados.getString("fecha"));
				}
                            }else{
                                return null;
                            }
			
		} catch (Exception e) { // tratamiento de error
			e.printStackTrace();

		} finally {
			try {
				if (null != conexion) {
					conexion.close();
				} // realizaci�n de la consulta
			} catch (Exception e) { // tratamiento de error
                            return null;
			}
		}
		return fechas;
	}
	

        
          public List<String> getTodasFechas(String bd) {
        List<String> fechas = new ArrayList<String>();

        try {
            pool = new Pool(bd);
            conexion = pool.getBasicDataSource().getConnection();
            String query = "Select distinct fecha from temperatura_nb order by clave desc";
            pstmt = conexion.prepareStatement(query);
            conjuntoResultados = pstmt.executeQuery();
            while (conjuntoResultados.next()) {
                fechas.add(conjuntoResultados.getString("fecha"));
            }

        } catch (Exception e) { // tratamiento de error
            e.printStackTrace();

        } finally {
            try {
                if (null != conexion) {
                    conexion.close();
                } // realizaciï¿½n de la consulta
            } catch (Exception e) { // tratamiento de error
            }
        }
        return fechas;
    }

	
	
	
	
	/*public static void main(String args[]) throws ParseException{
		TemperaturaNBDAO nb= new TemperaturaNBDAO();
//		Date fecha= (Date)nb.formatoFecha.parse("29/10/2011");
		Calendar fecha = Calendar.getInstance();
	    fecha.setTime((Date)nb.formatoFecha.parse("23/10/2011"));
		List<Temperaturas> temperaturas = nb.getTempS(fecha,"sensor_c",6);
		for(Temperaturas temp:temperaturas){
			System.out.println(nb.formatoFecha.format(temp.getFecha()).toString()+" "+temp.getHoraTMax()+" "+temp.getTemperaturaMax()+" "+temp.getHoraTMin()+" "+temp.getTemperaturaMin());
		}
		for(int i=0;i<13;i++){
			fecha.add(Calendar.DAY_OF_MONTH,-1);
			temperaturasNB = nb.getTemperaturaNBbyDate(fecha.getTime());
			for(TemperaturaNB tempNB:temperaturasNB){
				System.out.println(nb.formatoFecha.format(tempNB.getFecha()).toString()+" "+tempNB.getHora()+" "+tempNB.getSensor_c());
			}
		}
	}*/


}
